﻿using System;
using System.Collections.Generic;

using System.Text;

namespace Rance.Battle
{
    class 全体看破1 : 主动技能
    {
        public 全体看破1()
        {
            this.技能速度 = 140;
            this.消耗行动点 = Battle.消耗行动点.一点;
            this.技能目标 = Battle.技能目标.全体;
            this.技能站位要求 = Battle.技能站位要求.无;
        }

        public int 基数 = 2;

        public override void Excute(技能环境 环境)
        {
            base.Excute(环境);            

            赋予解除Behavior behavior = new 赋予解除Behavior();
            环境.行动结果.ResultList.Add(behavior);

            int count = Convert.ToInt32(环境.施放者.实际智 / 2 + 基数);
            int total赋予 = 0;
            foreach (var 角色 in 环境.目标List)
            {
                if (角色.攻击赋予 != null && 角色.攻击赋予.Level > 0)
                    total赋予++;
                if (角色.防御赋予 != null && 角色.防御赋予.Level > 0)
                    total赋予++;
                if (角色.速度赋予 != null && 角色.速度赋予.Level > 0)
                    total赋予++;
                if (角色.智力赋予 != null && 角色.智力赋予.Level > 0)
                    total赋予++;
            }

            if (total赋予 <= count)
            {
                foreach (var 角色 in 环境.目标List)
                {
                    角色Struct 角色Struct = new Battle.角色Struct() { ID = 角色.ID, Name = 角色.Name };
                    List<string> 赋予list = new List<string>();
                    behavior.List.Add(new 赋予解除BehaviorDetail() { 角色 = 角色Struct, List = 赋予list });

                    if (角色.Clear攻击赋予())
                        赋予list.Add("攻击");
                    if (角色.Clear防御赋予())
                        赋予list.Add("防御");
                    if (角色.Clear速度赋予())
                        赋予list.Add("速度");
                    if (角色.Clear智力赋予())
                        赋予list.Add("智力");
                }
            }
            else
            {
                List<int> list = new List<int>();
                Random r = new Random(DateTime.Now.Millisecond);
                for (int i = 0; i < count; i++)
                {
                    int index = 环境.队伍状况.战场.乱数表.Random(0, total赋予);
                    while (list.Contains(index))
                        index = 环境.队伍状况.战场.乱数表.Random(0, total赋予);

                    list.Add(index);
                }

                list.Sort((m1,m2) => m1.CompareTo(m2));

                foreach (var index in list)
                {
                    int temp = 0;

                    foreach (var 角色 in 环境.目标List)
                    {
                        角色Struct 角色Struct = new Battle.角色Struct() { ID = 角色.ID, Name = 角色.Name };
                        List<string> 赋予list = new List<string>();
                        behavior.List.Add(new 赋予解除BehaviorDetail() { 角色 = 角色Struct, List = 赋予list });

                        if (角色.攻击赋予 != null && 角色.攻击赋予.Level > 0)
                        {
                            if (temp == index)
                            {
                                角色.Clear攻击赋予();
                                赋予list.Add("攻击");
                                break;
                            }
                            temp++;
                        }

                        if (角色.防御赋予 != null && 角色.防御赋予.Level > 0)
                        {
                            if (temp == index)
                            {
                                角色.Clear防御赋予();
                                赋予list.Add("防御");
                                break;
                            }
                            temp++;
                        }

                        if (角色.速度赋予 != null && 角色.速度赋予.Level > 0)
                        {
                            if (temp == index)
                            {
                                角色.Clear速度赋予();
                                赋予list.Add("速度");
                                break;
                            }
                            temp++;
                        }

                        if (角色.智力赋予 != null && 角色.智力赋予.Level > 0)
                        {
                            if (temp == index)
                            {
                                角色.Clear智力赋予();
                                赋予list.Add("智力");
                                break;
                            }
                            temp++;
                        }
                    }
                }
            }
        }
    }

    class 全体看破2 : 全体看破1
    {
        public 全体看破2()
        {
            this.基数 = 5;
        }
    }
}
